package com.study.java.classloader.myClassLoader.FileSystemClassLoader;

/**
* @Name: FileSystemClassLoaderTest
* @Description: 自定义文件系统类加载器测试类
* @Author: 李超	lc_jack@foxmail.com
* @CreateDate: 2017-2-9 下午3:49:52 
* @Version: V1.0
 */
public class FileSystemClassLoaderTest {
	
	public static void main(String[] args) throws Exception {
		String rootDir = "d:/myjava" ;
		//创建自定义文件系统类加载器对象
		FileSystemClassLoader f1 = new FileSystemClassLoader(rootDir) ;
		//加载指定的字节码文件，获取字节码文件对象
		Class<?> h1 = f1.loadClass("com.study.java.HelloWorld") ;
		Class<?> h2 = f1.loadClass("com.study.java.HelloWorld") ;
		//使用同一个类加载器加载同一个类，则返回相同的字节码文件对象
		System.out.println(h1.hashCode());
		System.out.println(h2.hashCode());
		System.out.println(h1.getClassLoader()); //返回自定义文件系统类加载器
		System.out.println(h2.getClassLoader()); //返回自定义文件系统类加载器
		FileSystemClassLoader f2 = new FileSystemClassLoader(rootDir) ;
		Class<?> h3 = f2.loadClass("com.study.java.HelloWorld") ;
		//使用不同的类加载器加载同一个类，则返回不同的字节码文件对象
		System.out.println(h3.hashCode());
		System.out.println(h3.getClassLoader()); //返回自定义文件系统类加载器
		//如果父类加载器可以进行加载，则由父类加载器加载
		Class<?> s1 = f1.loadClass("java.lang.String") ;
		Class<?> a1 = f1.loadClass("com.study.java.classloader.myClassLoader.FileSystemClassLoader.FileSystemClassLoaderTest") ;
		System.out.println(s1.getClassLoader());  //返回引导类加载器
		System.out.println(a1.getClassLoader());  //返回应用程序类加载器
		
	}

}
